home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / perl5 / Cairo.pm next >
Text File  |  2009-03-28  |  23KB  |  1,563 lines

  1. #
  2. # Copyright (c) 2004-2008 by the cairo perl team (see the file README)
  3. #
  4. # Licensed under the LGPL, see LICENSE file for more information.
  5. #
  6. # $Id: Cairo.pm 171 2009-03-28 13:23:55Z tsch $
  7. #
  8.  
  9. package Cairo;
  10.  
  11. use strict;
  12. use warnings;
  13. use DynaLoader;
  14.  
  15. our @ISA = qw/DynaLoader/;
  16.  
  17. our $VERSION = '1.061';
  18.  
  19. sub dl_load_flags { $^O eq 'darwin' ? 0x00 : 0x01 }
  20.  
  21. Cairo->bootstrap ($VERSION);
  22.  
  23. # --------------------------------------------------------------------------- #
  24.  
  25. package Cairo;
  26.  
  27. 1;
  28.  
  29. __END__
  30.  
  31. =head1 NAME
  32.  
  33. Cairo - Perl interface to the cairo library
  34.  
  35. =head1 SYNOPSIS
  36.  
  37.   use Cairo;
  38.  
  39.   my $surface = Cairo::ImageSurface->create ('argb32', 100, 100);
  40.   my $cr = Cairo::Context->create ($surface);
  41.  
  42.   $cr->rectangle (10, 10, 40, 40);
  43.   $cr->set_source_rgb (0, 0, 0);
  44.   $cr->fill;
  45.  
  46.   $cr->rectangle (50, 50, 40, 40);
  47.   $cr->set_source_rgb (1, 1, 1);
  48.   $cr->fill;
  49.  
  50.   $cr->show_page;
  51.  
  52.   $surface->write_to_png ('output.png');
  53.  
  54. =head1 ABSTRACT
  55.  
  56. Cairo provides Perl bindings for the vector graphics library cairo.  It
  57. supports multiple output targets, including PNG, PDF and SVG.  Cairo produces
  58. identical output on all those targets.
  59.  
  60. =head1 API DOCUMENTATION
  61.  
  62. This is a listing of the API Cairo provides.  For more verbose information,
  63. refer to the cairo manual at L<http://cairographics.org/manual/>.
  64.  
  65. =head2 Drawing
  66.  
  67. =head3 Cairo::Context -- The cairo drawing context
  68.  
  69. I<Cairo::Context> is the main object used when drawing with Cairo. To draw with
  70. Cairo, you create a I<Cairo::Context>, set the target surface, and drawing
  71. options for the I<Cairo::Context>, create shapes with methods like
  72. C<$cr-E<gt>move_to> and C<$cr-E<gt>line_to>, and then draw shapes with
  73. C<$cr-E<gt>stroke> or C<$cr-E<gt>fill>.
  74.  
  75. I<Cairo::Context>'s can be pushed to a stack via C<$cr-E<gt>save>. They may
  76. then safely be changed, without loosing the current state. Use
  77. C<$cr-E<gt>restore> to restore to the saved state.
  78.  
  79. =over
  80.  
  81. =item $cr = Cairo::Context->create ($surface)
  82.  
  83. =over
  84.  
  85. =item $surface: I<Cairo::Surface>
  86.  
  87. =back
  88.  
  89. =item $cr-E<gt>save
  90.  
  91. =item $cr->restore
  92.  
  93. =item $status = $cr->status
  94.  
  95. =item $surface = $cr->get_target
  96.  
  97. =item $cr->push_group [1.2]
  98.  
  99. =item $cr->push_group_with_content ($content) [1.2]
  100.  
  101. =over
  102.  
  103. =item $content: I<Cairo::Content>
  104.  
  105. =back
  106.  
  107. =item $pattern = $cr->pop_group [1.2]
  108.  
  109. =item $cr->pop_group_to_source [1.2]
  110.  
  111. =item $surface = $cr->get_group_target [1.2]
  112.  
  113. =item $cr->set_source_rgb ($red, $green, $blue)
  114.  
  115. =over
  116.  
  117. =item $red: double
  118.  
  119. =item $green: double
  120.  
  121. =item $blue: double
  122.  
  123. =back
  124.  
  125. =item $cr->set_source_rgba ($red, $green, $blue, $alpha)
  126.  
  127. =over
  128.  
  129. =item $red: double
  130.  
  131. =item $green: double
  132.  
  133. =item $blue: double
  134.  
  135. =item $alpha: double
  136.  
  137. =back
  138.  
  139. =item $cr->set_source ($source)
  140.  
  141. =over
  142.  
  143. =item $source: I<Cairo::Pattern>
  144.  
  145. =back
  146.  
  147. =item $cr->set_source_surface ($surface, $x, $y)
  148.  
  149. =over
  150.  
  151. =item $surface: I<Cairo::Surface>
  152.  
  153. =item $x: double
  154.  
  155. =item $y: double
  156.  
  157. =back
  158.  
  159. =item $source = $cr->get_source
  160.  
  161. =item $cr->set_antialias ($antialias)
  162.  
  163. =over
  164.  
  165. =item $antialias: I<Cairo::Antialias>
  166.  
  167. =back
  168.  
  169. =item $antialias = $cr->get_antialias
  170.  
  171. =item $cr->set_dash ($offset, ...)
  172.  
  173. =over
  174.  
  175. =item $offset: double
  176.  
  177. =item ...: list of doubles
  178.  
  179. =back
  180.  
  181. =item $cr->set_fill_rule ($fill_rule)
  182.  
  183. =over
  184.  
  185. =item $fill_rule: I<Cairo::FillRule>
  186.  
  187. =back
  188.  
  189. =item $fill_rule = $cr->get_fill_rule
  190.  
  191. =item $cr->set_line_cap ($line_cap)
  192.  
  193. =over
  194.  
  195. =item $line_cap: I<Cairo::LineCap>
  196.  
  197. =back
  198.  
  199. =item $line_cap = $cr->get_line_cap
  200.  
  201. =item $cr->set_line_join ($line_join)
  202.  
  203. =over
  204.  
  205. =item $line_join: I<Cairo::LineJoin>
  206.  
  207. =back
  208.  
  209. =item $line_join = $cr->get_line_join
  210.  
  211. =item $cr->set_line_width ($width)
  212.  
  213. =over
  214.  
  215. =item $width: double
  216.  
  217. =back
  218.  
  219. =item $width = $cr->get_line_width
  220.  
  221. =item $cr->set_miter_limit ($limit)
  222.  
  223. =over
  224.  
  225. =item $limit: double
  226.  
  227. =back
  228.  
  229. =item ($offset, @dashes) = $cr->get_dash [1.4]
  230.  
  231. =item $limit = $cr->get_miter_limit
  232.  
  233. =item $cr->set_operator ($op)
  234.  
  235. =over
  236.  
  237. =item $op: I<Cairo::Operator>
  238.  
  239. =back
  240.  
  241. =item $op = $cr->get_operator
  242.  
  243. =item $cr->set_tolerance ($tolerance)
  244.  
  245. =over
  246.  
  247. =item $tolerance: double
  248.  
  249. =back
  250.  
  251. =item $tolerance = $cr->get_tolerance
  252.  
  253. =item $cr->clip
  254.  
  255. =item $cr->clip_preserve
  256.  
  257. =item ($x1, $y1, $x2, $y2) = $cr->clip_extents [1.4]
  258.  
  259. =item @rectangles = $cr->copy_clip_rectangle_list [1.4]
  260.  
  261. =item $cr->reset_clip
  262.  
  263. =item $cr->fill
  264.  
  265. =item $cr->fill_preserve
  266.  
  267. =item ($x1, $y1, $x2, $y2) = $cr->fill_extents
  268.  
  269. =item $bool = $cr->in_fill ($x, $y)
  270.  
  271. =over
  272.  
  273. =item $x: double
  274.  
  275. =item $y: double
  276.  
  277. =back
  278.  
  279. =item $cr->mask ($pattern)
  280.  
  281. =over
  282.  
  283. =item $pattern: I<Cairo::Pattern>
  284.  
  285. =back
  286.  
  287. =item $cr->mask_surface ($surface, $surface_x, $surface_y)
  288.  
  289. =over
  290.  
  291. =item $surface: I<Cairo::Surface>
  292.  
  293. =item $surface_x: double
  294.  
  295. =item $surface_y: double
  296.  
  297. =back
  298.  
  299. =item $cr->paint
  300.  
  301. =item $cr->paint_with_alpha ($alpha)
  302.  
  303. =over
  304.  
  305. =item $alpha: double
  306.  
  307. =back
  308.  
  309. =item $cr->stroke
  310.  
  311. =item $cr->stroke_preserve
  312.  
  313. =item ($x1, $y1, $x2, $y2) = $cr->stroke_extents
  314.  
  315. =item $bool = $cr->in_stroke ($x, $y)
  316.  
  317. =over
  318.  
  319. =item $x: double
  320.  
  321. =item $y: double
  322.  
  323. =back
  324.  
  325. =item $cr->copy_page
  326.  
  327. =item $cr->show_page
  328.  
  329. =back
  330.  
  331. =cut
  332.  
  333. # --------------------------------------------------------------------------- #
  334.  
  335. =head3 Paths -- Creating paths and manipulating path data
  336.  
  337.   $path = [
  338.     { type => "move-to", points => [[1, 2]] },
  339.     { type => "line-to", points => [[3, 4]] },
  340.     { type => "curve-to", points => [[5, 6], [7, 8], [9, 10]] },
  341.     ...
  342.     { type => "close-path", points => [] },
  343.   ];
  344.  
  345. I<Cairo::Path> is a data structure for holding a path. This data structure
  346. serves as the return value for C<$cr-E<gt>copy_path_data> and
  347. C<$cr-E<gt>copy_path_data_flat> as well the input value for
  348. C<$cr-E<gt>append_path>.
  349.  
  350. I<Cairo::Path> is represented as an array reference that contains path
  351. elements, represented by hash references with two keys: I<type> and I<points>.
  352. The value for I<type> can be either of the following:
  353.  
  354. =over
  355.  
  356. =item C<move-to>
  357.  
  358. =item C<line-to>
  359.  
  360. =item C<curve-to>
  361.  
  362. =item C<close-path>
  363.  
  364. =back
  365.  
  366. The value for I<points> is an array reference which contains zero or more
  367. points.  Points are represented as array references that contain two doubles:
  368. I<x> and I<y>.  The necessary number of points depends on the I<type> of the
  369. path element:
  370.  
  371. =over
  372.  
  373. =item C<move-to>: 1 point
  374.  
  375. =item C<line_to>: 1 point
  376.  
  377. =item C<curve-to>: 3 points
  378.  
  379. =item C<close-path>: 0 points
  380.  
  381. =back
  382.  
  383. The semantics and ordering of the coordinate values are consistent with
  384. C<$cr-E<gt>move_to>, C<$cr-E<gt>line_to>, C<$cr-E<gt>curve_to>, and
  385. C<$cr-E<gt>close_path>.
  386.  
  387. =over
  388.  
  389. =item $path = $cr->copy_path
  390.  
  391. =item $path = $cr->copy_path_flat
  392.  
  393. =item $cr->append_path ($path)
  394.  
  395. =over
  396.  
  397. =item $path: I<Cairo::Path>
  398.  
  399. =back
  400.  
  401. =item $bool = $cr->has_current_point [1.6]
  402.  
  403. =item ($x, $y) = $cr->get_current_point
  404.  
  405. =item $cr->new_path
  406.  
  407. =item $cr->new_sub_path [1.2]
  408.  
  409. =item $cr->close_path
  410.  
  411. =item ($x1, $y1, $x2, $y2) = $cr->path_extents [1.6]
  412.  
  413. =item $cr->arc ($xc, $yc, $radius, $angle1, $angle2)
  414.  
  415. =over
  416.  
  417. =item $xc: double
  418.  
  419. =item $yc: double
  420.  
  421. =item $radius: double
  422.  
  423. =item $angle1: double
  424.  
  425. =item $angle2: double
  426.  
  427. =back
  428.  
  429. =item $cr->arc_negative ($xc, $yc, $radius, $angle1, $angle2)
  430.  
  431. =over
  432.  
  433. =item $xc: double
  434.  
  435. =item $yc: double
  436.  
  437. =item $radius: double
  438.  
  439. =item $angle1: double
  440.  
  441. =item $angle2: double
  442.  
  443. =back
  444.  
  445. =item $cr->curve_to ($x1, $y1, $x2, $y2, $x3, $y3)
  446.  
  447. =over
  448.  
  449. =item $x1: double
  450.  
  451. =item $y1: double
  452.  
  453. =item $x2: double
  454.  
  455. =item $y2: double
  456.  
  457. =item $x3: double
  458.  
  459. =item $y3: double
  460.  
  461. =back
  462.  
  463. =item $cr->line_to ($x, $y)
  464.  
  465. =over
  466.  
  467. =item $x: double
  468.  
  469. =item $y: double
  470.  
  471. =back
  472.  
  473. =item $cr->move_to ($x, $y)
  474.  
  475. =over
  476.  
  477. =item $x: double
  478.  
  479. =item $y: double
  480.  
  481. =back
  482.  
  483. =item $cr->rectangle ($x, $y, $width, $height)
  484.  
  485. =over
  486.  
  487. =item $x: double
  488.  
  489. =item $y: double
  490.  
  491. =item $width: double
  492.  
  493. =item $height: double
  494.  
  495. =back
  496.  
  497. =item $cr->glyph_path (...)
  498.  
  499. =over
  500.  
  501. =item ...: list of I<Cairo::Glyph>'s
  502.  
  503. =back
  504.  
  505. =item $cr->text_path ($utf8)
  506.  
  507. =over
  508.  
  509. =item $utf8: string in utf8 encoding
  510.  
  511. =back
  512.  
  513. =item $cr->rel_curve_to ($dx1, $dy1, $dx2, $dy2, $dx3, $dy3)
  514.  
  515. =over
  516.  
  517. =item $dx1: double
  518.  
  519. =item $dy1: double
  520.  
  521. =item $dx2: double
  522.  
  523. =item $dy2: double
  524.  
  525. =item $dx3: double
  526.  
  527. =item $dy3: double
  528.  
  529. =back
  530.  
  531. =item $cr->rel_line_to ($dx, $dy)
  532.  
  533. =over
  534.  
  535. =item $dx: double
  536.  
  537. =item $dy: double
  538.  
  539. =back
  540.  
  541. =item $cr->rel_move_to ($dx, $dy)
  542.  
  543. =over
  544.  
  545. =item $dx: double
  546.  
  547. =item $dy: double
  548.  
  549. =back
  550.  
  551. =back
  552.  
  553. =cut
  554.  
  555. # --------------------------------------------------------------------------- #
  556.  
  557. =head3 Patterns -- Gradients and filtered sources
  558.  
  559. =over
  560.  
  561. =item $status = $pattern->status
  562.  
  563. =item $type = $pattern->get_type [1.2]
  564.  
  565. =item $pattern->set_matrix ($matrix)
  566.  
  567. =over
  568.  
  569. =item $matrix: I<Cairo::Matrix>
  570.  
  571. =back
  572.  
  573. =item $matrix = $pattern->get_matrix
  574.  
  575. =item $pattern = Cairo::SolidPattern->create_rgb ($red, $green, $blue)
  576.  
  577. =over
  578.  
  579. =item $red: double
  580.  
  581. =item $green: double
  582.  
  583. =item $blue: double
  584.  
  585. =back
  586.  
  587. =item $pattern = Cairo::SolidPattern->create_rgba ($red, $green, $blue, $alpha)
  588.  
  589. =over
  590.  
  591. =item $red: double
  592.  
  593. =item $green: double
  594.  
  595. =item $blue: double
  596.  
  597. =item $alpha: double
  598.  
  599. =back
  600.  
  601. =item ($r, $g, $b, $a) = $pattern->get_rgba [1.4]
  602.  
  603. =item $pattern = Cairo::SurfacePattern->create ($surface)
  604.  
  605. =over
  606.  
  607. =item $surface: I<Cairo::Surface>
  608.  
  609. =back
  610.  
  611. =item $pattern->set_extend ($extend)
  612.  
  613. =over
  614.  
  615. =item $extend: I<Cairo::Extend>
  616.  
  617. =back
  618.  
  619. =item $extend = $pattern->get_extend
  620.  
  621. =item $pattern->set_filter ($filter)
  622.  
  623. =over
  624.  
  625. =item $filter: I<Cairo::Filter>
  626.  
  627. =back
  628.  
  629. =item $filter = $pattern->get_filter
  630.  
  631. =item $surface = $pattern->get_surface [1.4]
  632.  
  633. =item $pattern = Cairo::LinearGradient->create ($x0, $y0, $x1, $y1)
  634.  
  635. =over
  636.  
  637. =item $x0: double
  638.  
  639. =item $y0: double
  640.  
  641. =item $x1: double
  642.  
  643. =item $y1: double
  644.  
  645. =back
  646.  
  647. =item ($x0, $y0, $x1, $y1) = $pattern->get_points [1.4]
  648.  
  649. =item $pattern = Cairo::RadialGradient->create ($cx0, $cy0, $radius0, $cx1, $cy1, $radius1)
  650.  
  651. =over
  652.  
  653. =item $cx0: double
  654.  
  655. =item $cy0: double
  656.  
  657. =item $radius0: double
  658.  
  659. =item $cx1: double
  660.  
  661. =item $cy1: double
  662.  
  663. =item $radius1: double
  664.  
  665. =back
  666.  
  667. =item ($x0, $y0, $r0, $x1, $y1, $r1) = $pattern->get_circles [1.4]
  668.  
  669. =item $pattern->add_color_stop_rgb ($offset, $red, $green, $blue)
  670.  
  671. =over
  672.  
  673. =item $offset: double
  674.  
  675. =item $red: double
  676.  
  677. =item $green: double
  678.  
  679. =item $blue: double
  680.  
  681. =back
  682.  
  683. =item $pattern->add_color_stop_rgba ($offset, $red, $green, $blue, $alpha)
  684.  
  685. =over
  686.  
  687. =item $offset: double
  688.  
  689. =item $red: double
  690.  
  691. =item $green: double
  692.  
  693. =item $blue: double
  694.  
  695. =item $alpha: double
  696.  
  697. =back
  698.  
  699. =item @stops = $pattern->get_color_stops [1.4]
  700.  
  701. A color stop is represented as an array reference with five elements: offset,
  702. red, green, blue, and alpha.
  703.  
  704. =back
  705.  
  706. =cut
  707.  
  708. # --------------------------------------------------------------------------- #
  709.  
  710. =head3 Transformations -- Manipulating the current transformation matrix
  711.  
  712. =over
  713.  
  714. =item $cr->translate ($tx, $ty)
  715.  
  716. =over
  717.  
  718. =item $tx: double
  719.  
  720. =item $ty: double
  721.  
  722. =back
  723.  
  724. =item $cr->scale ($sx, $sy)
  725.  
  726. =over
  727.  
  728. =item $sx: double
  729.  
  730. =item $sy: double
  731.  
  732. =back
  733.  
  734. =item $cr->rotate ($angle)
  735.  
  736. =over
  737.  
  738. =item $angle: double
  739.  
  740. =back
  741.  
  742. =item $cr->transform ($matrix)
  743.  
  744. =over
  745.  
  746. =item $matrix: I<Cairo::Matrix>
  747.  
  748. =back
  749.  
  750. =item $cr->set_matrix ($matrix)
  751.  
  752. =over
  753.  
  754. =item $matrix: I<Cairo::Matrix>
  755.  
  756. =back
  757.  
  758. =item $matrix = $cr->get_matrix
  759.  
  760. =item $cr->identity_matrix
  761.  
  762. =item ($x, $y) = $cr->user_to_device ($x, $y)
  763.  
  764. =over
  765.  
  766. =item $x: double
  767.  
  768. =item $y: double
  769.  
  770. =back
  771.  
  772. =item ($dx, $dy) = $cr->user_to_device_distance ($dx, $dy)
  773.  
  774. =over
  775.  
  776. =item $dx: double
  777.  
  778. =item $dy: double
  779.  
  780. =back
  781.  
  782. =item ($x, $y) = $cr->device_to_user ($x, $y)
  783.  
  784. =over
  785.  
  786. =item $x: double
  787.  
  788. =item $y: double
  789.  
  790. =back
  791.  
  792. =item ($dx, $dy) = $cr->device_to_user_distance ($dx, $dy)
  793.  
  794. =over
  795.  
  796. =item $dx: double
  797.  
  798. =item $dy: double
  799.  
  800. =back
  801.  
  802. =back
  803.  
  804. =cut
  805.  
  806. # --------------------------------------------------------------------------- #
  807.  
  808. =head3 Text -- Rendering text and sets of glyphs
  809.  
  810. Glyphs are represented as anonymous hash references with three keys: I<index>,
  811. I<x> and I<y>.  Example:
  812.  
  813.   my @glyphs = ({ index => 1, x => 2, y => 3 },
  814.                 { index => 2, x => 3, y => 4 },
  815.                 { index => 3, x => 4, y => 5 });
  816.  
  817. =over
  818.  
  819. =item $cr->select_font_face ($family, $slant, $weight)
  820.  
  821. =over
  822.  
  823. =item $family: string
  824.  
  825. =item $slant: I<Cairo::FontSlant>
  826.  
  827. =item $weight: I<Cairo::FontWeight>
  828.  
  829. =back
  830.  
  831. =item $cr->set_font_size ($size)
  832.  
  833. =over
  834.  
  835. =item $size: double
  836.  
  837. =back
  838.  
  839. =item $cr->set_font_matrix ($matrix)
  840.  
  841. =over
  842.  
  843. =item $matrix: I<Cairo::Matrix>
  844.  
  845. =back
  846.  
  847. =item $matrix = $cr->get_font_matrix
  848.  
  849. =item $cr->set_font_options ($options)
  850.  
  851. =over
  852.  
  853. =item $options: I<Cairo::FontOptions>
  854.  
  855. =back
  856.  
  857. =item $options = $cr->get_font_options
  858.  
  859. =item $cr->set_scaled_font ($scaled_font) [1.2]
  860.  
  861. =over
  862.  
  863. =item $scaled_font: I<Cairo::ScaledFont>
  864.  
  865. =back
  866.  
  867. =item $scaled_font = $cr->get_scaled_font [1.4]
  868.  
  869. =item $cr->show_text ($utf8)
  870.  
  871. =over
  872.  
  873. =item $utf8: string
  874.  
  875. =back
  876.  
  877. =item $cr->show_glyphs (...)
  878.  
  879. =over
  880.  
  881. =item ...: list of glyphs
  882.  
  883. =back
  884.  
  885. =item $face = $cr->get_font_face
  886.  
  887. =item $extents = $cr->font_extents
  888.  
  889. =item $cr->set_font_face ($font_face)
  890.  
  891. =over
  892.  
  893. =item $font_face: I<Cairo::FontFace>
  894.  
  895. =back
  896.  
  897. =item $cr->set_scaled_font ($scaled_font)
  898.  
  899. =over
  900.  
  901. =item $scaled_font: I<Cairo::ScaledFont>
  902.  
  903. =back
  904.  
  905. =item $extents = $cr->text_extents ($utf8)
  906.  
  907. =over
  908.  
  909. =item $utf8: string
  910.  
  911. =back
  912.  
  913. =item $extents = $cr->glyph_extents (...)
  914.  
  915. =over
  916.  
  917. =item ...: list of glyphs
  918.  
  919. =back
  920.  
  921. =back
  922.  
  923. =cut
  924.  
  925. # --------------------------------------------------------------------------- #
  926.  
  927. =head2 Fonts
  928.  
  929. =head3 Cairo::FontFace -- Base class for fonts
  930.  
  931. =over
  932.  
  933. =item $status = $font_face->status
  934.  
  935. =item $type = $font_face->get_type [1.2]
  936.  
  937. =back
  938.  
  939. =cut
  940.  
  941. # --------------------------------------------------------------------------- #
  942.  
  943. =head3 Scaled Fonts -- Caching metrics for a particular font size
  944.  
  945. =over
  946.  
  947. =item $scaled_font = Cairo::ScaledFont->create ($font_face, $font_matrix, $ctm, $options)
  948.  
  949. =over
  950.  
  951. =item $font_face: I<Cairo::FontFace>
  952.  
  953. =item $font_matrix: I<Cairo::Matrix>
  954.  
  955. =item $ctm: I<Cairo::Matrix>
  956.  
  957. =item $options: I<Cairo::FontOptions>
  958.  
  959. =back
  960.  
  961. =item $status = $scaled_font->status
  962.  
  963. =item $extents = $scaled_font->extents
  964.  
  965. =item $extents = $scaled_font->text_extents ($utf8) [1.2]
  966.  
  967. =over
  968.  
  969. =item $utf8: string
  970.  
  971. =back
  972.  
  973. =item $extents = $scaled_font->glyph_extents (...)
  974.  
  975. =over
  976.  
  977. =item ...: list of glyphs
  978.  
  979. =back
  980.  
  981. =item $font_face = $scaled_font->get_font_face [1.2]
  982.  
  983. =item $options = $scaled_font->get_font_options [1.2]
  984.  
  985. =item $font_matrix = $scaled_font->get_font_matrix [1.2]
  986.  
  987. =item $ctm = $scaled_font->get_ctm [1.2]
  988.  
  989. =item $type = $scaled_font->get_type [1.2]
  990.  
  991. =back
  992.  
  993. =cut
  994.  
  995. # --------------------------------------------------------------------------- #
  996.  
  997. =head3 Font Options -- How a font should be rendered
  998.  
  999. =over
  1000.  
  1001. =item $font_options = Cairo::FontOptions->create
  1002.  
  1003. =item $status = $font_options->status
  1004.  
  1005. =item $font_options->merge ($other)
  1006.  
  1007. =over
  1008.  
  1009. =item $other: I<Cairo::FontOptions>
  1010.  
  1011. =back
  1012.  
  1013. =item $hash = $font_options->hash
  1014.  
  1015. =item $bools = $font_options->equal ($other)
  1016.  
  1017. =over
  1018.  
  1019. =item $other: I<Cairo::FontOptions>
  1020.  
  1021. =back
  1022.  
  1023. =item $font_options->set_antialias ($antialias)
  1024.  
  1025. =over
  1026.  
  1027. =item $antialias: I<Cairo::AntiAlias>
  1028.  
  1029. =back
  1030.  
  1031. =item $antialias = $font_options->get_antialias
  1032.  
  1033. =item $font_options->set_subpixel_order ($subpixel_order)
  1034.  
  1035. =over
  1036.  
  1037. =item $subpixel_order: I<Cairo::SubpixelOrder>
  1038.  
  1039. =back
  1040.  
  1041. =item $subpixel_order = $font_options->get_subpixel_order
  1042.  
  1043. =item $font_options->set_hint_style ($hint_style)
  1044.  
  1045. =over
  1046.  
  1047. =item $hint_style: I<Cairo::HintStyle>
  1048.  
  1049. =back
  1050.  
  1051. =item $hint_style = $font_options->get_hint_style
  1052.  
  1053. =item $font_options->set_hint_metrics ($hint_metrics)
  1054.  
  1055. =over
  1056.  
  1057. =item $hint_metrics: I<Cairo::HintMetrics>
  1058.  
  1059. =back
  1060.  
  1061. =item $hint_metrics = $font_options->get_hint_metrics
  1062.  
  1063. =back
  1064.  
  1065. =cut
  1066.  
  1067. # --------------------------------------------------------------------------- #
  1068.  
  1069. =head3 FreeType Fonts -- Font support for FreeType
  1070.  
  1071. If your cairo library supports it, the FreeType integration allows you to load
  1072. font faces from font files.  You can query for this capability with
  1073. C<Cairo::HAS_FT_FONT>.  To actually use this, you'll need the L<Font::FreeType>
  1074. module.
  1075.  
  1076. =over
  1077.  
  1078. =item my $face = Cairo::FtFontFace->create ($ft_face, $load_flags=0)
  1079.  
  1080. =over
  1081.  
  1082. =item $ft_face: I<Font::FreeType::Face>
  1083.  
  1084. =item $load_flags: integer
  1085.  
  1086. =back
  1087.  
  1088. This method allows you to create a I<Cairo::FontFace> from a
  1089. I<Font::FreeType::Face>.  To obtain the latter, you can for example load it
  1090. from a file:
  1091.  
  1092.   my $file = '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf';
  1093.   my $ft_face = Font::FreeType->new->face ($file);
  1094.   my $face = Cairo::FtFontFace->create ($ft_face);
  1095.  
  1096. =back
  1097.  
  1098. =cut
  1099.  
  1100. # --------------------------------------------------------------------------- #
  1101.  
  1102. =head2 Surfaces
  1103.  
  1104. =head3 I<Cairo::Surface> -- Base class for surfaces
  1105.  
  1106. =over
  1107.  
  1108. =item $new = $old->create_similar ($content, $width, $height)
  1109.  
  1110. =over
  1111.  
  1112. =item $content: I<Cairo::Content>
  1113.  
  1114. =item $width: integer
  1115.  
  1116. =item $height: integer
  1117.  
  1118. =back
  1119.  
  1120. =item $status = $surface->status
  1121.  
  1122. =item $surface->finish
  1123.  
  1124. =item $surface->flush
  1125.  
  1126. =item $font_options = $surface->get_font_options
  1127.  
  1128. =item $content = $surface->get_content [1.2]
  1129.  
  1130. =item $surface->mark_dirty
  1131.  
  1132. =item $surface->mark_dirty_rectangle ($x, $y, $width, $height)
  1133.  
  1134. =over
  1135.  
  1136. =item $x: integer
  1137.  
  1138. =item $y: integer
  1139.  
  1140. =item $width: integer
  1141.  
  1142. =item $height: integer
  1143.  
  1144. =back
  1145.  
  1146. =item $surface->set_device_offset ($x_offset, $y_offset)
  1147.  
  1148. =over
  1149.  
  1150. =item $x_offset: integer
  1151.  
  1152. =item $y_offset: integer
  1153.  
  1154. =back
  1155.  
  1156. =item ($x_offset, $y_offset) = $surface->get_device_offset [1.2]
  1157.  
  1158. =item $surface->set_fallback_resolution ($x_pixels_per_inch, $y_pixels_per_inch) [1.2]
  1159.  
  1160. =over
  1161.  
  1162. =item $x_pixels_per_inch: double
  1163.  
  1164. =item $y_pixels_per_inch: double
  1165.  
  1166. =back
  1167.  
  1168. =item $type = $surface->get_type [1.2]
  1169.  
  1170. =item $status = $surface->copy_page [1.6]
  1171.  
  1172. =over
  1173.  
  1174. =item $status: I<Cairo::Status>
  1175.  
  1176. =back
  1177.  
  1178. =item $status = $surface->show_page [1.6]
  1179.  
  1180. =over
  1181.  
  1182. =item $status: I<Cairo::Status>
  1183.  
  1184. =back
  1185.  
  1186. =back
  1187.  
  1188. =cut
  1189.  
  1190. # --------------------------------------------------------------------------- #
  1191.  
  1192. =head3 Image Surfaces -- Rendering to memory buffers
  1193.  
  1194. =over
  1195.  
  1196. =item $surface = Cairo::ImageSurface->create ($format, $width, $height)
  1197.  
  1198. =over
  1199.  
  1200. =item $format: I<Cairo::Format>
  1201.  
  1202. =item $width: integer
  1203.  
  1204. =item $height: integer
  1205.  
  1206. =back
  1207.  
  1208. =item $surface = Cairo::ImageSurface->create_for_data ($data, $format, $width, $height, $stride)
  1209.  
  1210. =over
  1211.  
  1212. =item $data: image data
  1213.  
  1214. =item $format: I<Cairo::Format>
  1215.  
  1216. =item $width: integer
  1217.  
  1218. =item $height: integer
  1219.  
  1220. =item $stride: integer
  1221.  
  1222. =back
  1223.  
  1224. =item $data = $surface->get_data [1.2]
  1225.  
  1226. =item $format = $surface->get_format [1.2]
  1227.  
  1228. =item $width = $surface->get_width
  1229.  
  1230. =item $height = $surface->get_height
  1231.  
  1232. =item $stride = $surface->get_stride [1.2]
  1233.  
  1234. =back
  1235.  
  1236. =cut
  1237.  
  1238. # --------------------------------------------------------------------------- #
  1239.  
  1240. =head3 PDF Surfaces -- Rendering PDF documents
  1241.  
  1242. =over
  1243.  
  1244. =item $surface = Cairo::PdfSurface->create ($filename, $width_in_points, $height_in_points) [1.2]
  1245.  
  1246. =over
  1247.  
  1248. =item $filename: string
  1249.  
  1250. =item $width_in_points: double
  1251.  
  1252. =item $height_in_points: double
  1253.  
  1254. =back
  1255.  
  1256. =item $surface = Cairo::PdfSurface->create_for_stream ($callback, $callback_data, $width_in_points, $height_in_points) [1.2]
  1257.  
  1258. =over
  1259.  
  1260. =item $callback: L<Cairo::WriteFunc>
  1261.  
  1262. =item $callback_data: scalar
  1263.  
  1264. =item $width_in_points: double
  1265.  
  1266. =item $height_in_points: double
  1267.  
  1268. =back
  1269.  
  1270. =item $surface->set_size ($width_in_points, $height_in_points) [1.2]
  1271.  
  1272. =over
  1273.  
  1274. =item $width_in_points: double
  1275.  
  1276. =item $height_in_points: double
  1277.  
  1278. =back
  1279.  
  1280. =back
  1281.  
  1282. =cut
  1283.  
  1284. # --------------------------------------------------------------------------- #
  1285.  
  1286. =head3 PNG Support -- Reading and writing PNG images
  1287.  
  1288. =over
  1289.  
  1290. =item $surface = Cairo::ImageSurface->create_from_png ($filename)
  1291.  
  1292. =over
  1293.  
  1294. =item $filename: string
  1295.  
  1296. =back
  1297.  
  1298. =item Cairo::ReadFunc: $data = sub { my ($callback_data, $length) = @_; }
  1299.  
  1300. =over
  1301.  
  1302. =item $data: binary image data, of length $length
  1303.  
  1304. =item $callback_data: scalar, user data
  1305.  
  1306. =item $length: integer, bytes to read
  1307.  
  1308. =back
  1309.  
  1310. =item $surface = Cairo::ImageSurface->create_from_png_stream ($callback, $callback_data)
  1311.  
  1312. =over
  1313.  
  1314. =item $callback: L<Cairo::ReadFunc>
  1315.  
  1316. =item $callback_data: scalar
  1317.  
  1318. =back
  1319.  
  1320. =item $status = $surface->write_to_png ($filename)
  1321.  
  1322. =over
  1323.  
  1324. =item $filename: string
  1325.  
  1326. =back
  1327.  
  1328. =item Cairo::WriteFunc: sub { my ($callback_data, $data) = @_; }
  1329.  
  1330. =over
  1331.  
  1332. =item $callback_data: scalar, user data
  1333.  
  1334. =item $data: binary image data, to be written
  1335.  
  1336. =back
  1337.  
  1338. =item $status = $surface->write_to_png_stream ($callback, $callback_data)
  1339.  
  1340. =over
  1341.  
  1342. =item $callback: L<Cairo::WriteFunc>
  1343.  
  1344. =item $callback_data: scalar
  1345.  
  1346. =back
  1347.  
  1348. =back
  1349.  
  1350. =cut
  1351.  
  1352. # --------------------------------------------------------------------------- #
  1353.  
  1354. =head3 PostScript Surfaces -- Rendering PostScript documents
  1355.  
  1356. =over
  1357.  
  1358. =item $surface = Cairo::PsSurface->create ($filename, $width_in_points, $height_in_points) [1.2]
  1359.  
  1360. =over
  1361.  
  1362. =item $filename: string
  1363.  
  1364. =item $width_in_points: double
  1365.  
  1366. =item $height_in_points: double
  1367.  
  1368. =back
  1369.  
  1370. =item $surface = Cairo::PsSurface->create_for_stream ($callback, $callback_data, $width_in_points, $height_in_points) [1.2]
  1371.  
  1372. =over
  1373.  
  1374. =item $callback: L<Cairo::WriteFunc>
  1375.  
  1376. =item $callback_data: scalar
  1377.  
  1378. =item $width_in_points: double
  1379.  
  1380. =item $height_in_points: double
  1381.  
  1382. =back
  1383.  
  1384. =item $surface->set_size ($width_in_points, $height_in_points) [1.2]
  1385.  
  1386. =over
  1387.  
  1388. =item $width_in_points: double
  1389.  
  1390. =item $height_in_points: double
  1391.  
  1392. =back
  1393.  
  1394. =item $surface->dsc_begin_setup [1.2]
  1395.  
  1396. =item $surface->dsc_begin_page_setup [1.2]
  1397.  
  1398. =item $surface->dsc_comment ($comment) [1.2]
  1399.  
  1400. =over
  1401.  
  1402. =item $comment: string
  1403.  
  1404. =back
  1405.  
  1406. =item $surface->restrict_to_level ($level) [1.6]
  1407.  
  1408. =over
  1409.  
  1410. =item $level: I<Cairo::PsLevel>
  1411.  
  1412. =back
  1413.  
  1414. =item @levels = Cairo::PsSurface::get_levels [1.6]
  1415.  
  1416. =item $string = Cairo::PsSurface::level_to_string ($level) [1.6]
  1417.  
  1418. =over
  1419.  
  1420. =item $level: I<Cairo::PsLevel>
  1421.  
  1422. =back
  1423.  
  1424. =item $surface->set_eps ($eps) [1.6]
  1425.  
  1426. =over
  1427.  
  1428. =item $eps: boolean
  1429.  
  1430. =back
  1431.  
  1432. =item $eps = $surface->get_eps [1.6]
  1433.  
  1434. =back
  1435.  
  1436. =cut
  1437.  
  1438. # --------------------------------------------------------------------------- #
  1439.  
  1440. =head3 SVG Surfaces -- Rendering SVG documents
  1441.  
  1442. =over
  1443.  
  1444. =item $surface = Cairo::SvgSurface->create ($filename, $width_in_points, $height_in_points) [1.2]
  1445.  
  1446. =over
  1447.  
  1448. =item $filename: string
  1449.  
  1450. =item $width_in_points: double
  1451.  
  1452. =item $height_in_points: double
  1453.  
  1454. =back
  1455.  
  1456. =item $surface = Cairo::SvgSurface->create_for_stream ($callback, $callback_data, $width_in_points, $height_in_points) [1.2]
  1457.  
  1458. =over
  1459.  
  1460. =item $callback: L<Cairo::WriteFunc>
  1461.  
  1462. =item $callback_data: scalar
  1463.  
  1464. =item $width_in_points: double
  1465.  
  1466. =item $height_in_points: double
  1467.  
  1468. =back
  1469.  
  1470. =item $surface->restrict_to_version ($version) [1.2]
  1471.  
  1472. =over
  1473.  
  1474. =item $version: I<Cairo::SvgVersion>
  1475.  
  1476. =back
  1477.  
  1478. =item @versions = Cairo::SvgSurface::get_versions [1.2]
  1479.  
  1480. =item $string = Cairo::SvgSurface::version_to_string ($version) [1.2]
  1481.  
  1482. =over
  1483.  
  1484. =item $version: I<Cairo::SvgVersion>
  1485.  
  1486. =back
  1487.  
  1488. =back
  1489.  
  1490. =cut
  1491.  
  1492. # --------------------------------------------------------------------------- #
  1493.  
  1494. =head2 Utilities
  1495.  
  1496. =head3 Version Information -- Run-time and compile-time version checks.
  1497.  
  1498. =over
  1499.  
  1500. =item $version = Cairo->version
  1501.  
  1502. =item $string = Cairo->version_string
  1503.  
  1504. =item $version_code = Cairo->VERSION
  1505.  
  1506. =item $version_code = Cairo->VERSION_ENCODE ($major, $minor, $micro)
  1507.  
  1508. =over
  1509.  
  1510. =item $major: integer
  1511.  
  1512. =item $minor: integer
  1513.  
  1514. =item $micro: integer
  1515.  
  1516. =back
  1517.  
  1518. =item $stride = Cairo::Format::stride_for_width ($format, $width) [1.6]
  1519.  
  1520. =over
  1521.  
  1522. =item $format: I<Cairo::Format>
  1523.  
  1524. =item $width: integer
  1525.  
  1526. =back
  1527.  
  1528. =back
  1529.  
  1530. =cut
  1531.  
  1532. # --------------------------------------------------------------------------- #
  1533.  
  1534. =head1 SEE ALSO
  1535.  
  1536. =over
  1537.  
  1538. =item L<http://cairographics.org/documentation>
  1539.  
  1540. Lists many available resources including tutorials and examples
  1541.  
  1542. =item L<http://cairographics.org/manual/>
  1543.  
  1544. Contains the reference manual
  1545.  
  1546. =back
  1547.  
  1548. =head1 AUTHORS
  1549.  
  1550. =over
  1551.  
  1552. =item Ross McFarland E<lt>rwmcfa1 at neces dot comE<gt>
  1553.  
  1554. =item Torsten Schoenfeld E<lt>kaffeetisch at gmx dot deE<gt>
  1555.  
  1556. =back
  1557.  
  1558. =head1 COPYRIGHT
  1559.  
  1560. Copyright (C) 2004-2009 by the cairo perl team
  1561.  
  1562. =cut
  1563.